package main;
// Decompiled by Jad v1.5.8f. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3) 

import java.applet.Applet;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;

import main.bots.Methods;

@SuppressWarnings("serial")
public class RSApplet extends JApplet
	implements Runnable, MouseListener, MouseMotionListener, KeyListener, FocusListener, WindowListener
{
	public RSApplet toUse;
	public JFrame frame;
	public GUI gui;
	public Applet toPaint;
	JMenuBar mainBar = new JMenuBar();
	JMenu fileMenu = new JMenu("File");
	public Graphics getPaintedGraphics() {
		return gameFrame.getGlassPane().getGraphics();
	}
	public Component getToPaint() {
		return gameFrame.getGlassPane();
	}
	protected final void createClientFrame(int i, int j)
	{
		myWidth = j;
		myHeight = i;
		gui = new GUI();
		
			gameFrame = new RSFrame(this, myWidth, myHeight);
			graphics = getGameComponent().getGraphics();
			fullGameScreen = new RSImageProducer(myWidth, myHeight, getGameComponent());
			startRunnable(this, 1);
			gameFrame.setGlassPane(new PaintClass());
			setGlassPane(new PaintClass());
		
	}

	final void initClientFrame(int i, int j)
	{
		myWidth = j;
		myHeight = i;
		graphics = getGameComponent().getGraphics();
		fullGameScreen = new RSImageProducer(myWidth, myHeight, getGameComponent());
		startRunnable(this, 1);
	}

	public void run()
	{
		toUse = this;
		System.out.println("Main client thread: " + Thread.currentThread().getName());
		getGameComponent().addMouseListener(this);
		getGameComponent().addMouseMotionListener(this);
		getGameComponent().addKeyListener(this);
		getGameComponent().addFocusListener(this);
	
		System.out.println("Passed");
		if(gameFrame != null)
			gameFrame.addWindowListener(this);
		drawLoadingText(0, "Loading...");
		startUp();
		int i = 0;
		int j = 256;
		int k = 1;
		int i1 = 0;
		int j1 = 0;
		for(int k1 = 0; k1 < 10; k1++)
			aLongArray7[k1] = System.currentTimeMillis();

		long l = System.currentTimeMillis();
		while(anInt4 >= 0) 
		{
			if(anInt4 > 0)
			{
				anInt4--;
				if(anInt4 == 0)
				{
					exit();
					return;
				}
			}
			int i2 = j;
			int j2 = k;
			j = 300;
			k = 1;
			long l1 = System.currentTimeMillis();
			if(aLongArray7[i] == 0L)
			{
				j = i2;
				k = j2;
			} else
			if(l1 > aLongArray7[i])
				j = (int)((long)(2560 * delayTime) / (l1 - aLongArray7[i]));
			if(j < 25)
				j = 25;
			if(j > 256)
			{
				j = 256;
				k = (int)((long) delayTime - (l1 - aLongArray7[i]) / 10L);
			}
			if(k > delayTime)
				k = delayTime;
			aLongArray7[i] = l1;
			i = (i + 1) % 10;
			if(k > 1)
			{
				for(int k2 = 0; k2 < 10; k2++)
					if(aLongArray7[k2] != 0L)
						aLongArray7[k2] += k;

			}
			if(k < minDelay)
				k = minDelay;
			try
			{
				Thread.sleep(k);
			}
			catch(InterruptedException _ex)
			{
				j1++;
			}
			for(; i1 < 256; i1 += j)
			{
				clickMode3 = clickMode1;
				saveClickX = clickX;
				saveClickY = clickY;
				aLong29 = clickTime;
				clickMode1 = 0;
				processGameLoop();
				readIndex = writeIndex;
			}

			i1 &= 0xff;
			if(delayTime > 0)
				fps = (1000 * j) / (delayTime * 256);
			processDrawing();
			if(shouldDebug)
			{
				System.out.println("ntime:" + l1);
				for(int l2 = 0; l2 < 10; l2++)
				{
					int i3 = ((i - l2 - 1) + 20) % 10;
					System.out.println("otim" + i3 + ":" + aLongArray7[i3]);
				}

				System.out.println("fps:" + fps + " ratio:" + j + " count:" + i1);
				System.out.println("del:" + k + " deltime:" + delayTime + " mindel:" + minDelay);
				System.out.println("intex:" + j1 + " opos:" + i);
				shouldDebug = false;
				j1 = 0;
			}
		}
		if(anInt4 == -1)
			exit();
	}
	
	private void exit()
	{
		anInt4 = -2;
		cleanUpForQuit();
		if(gameFrame != null)
		{
			try
			{
				Thread.sleep(1000L);
			}
			catch(Exception _ex) { }
			try
			{
				System.exit(0);
			}
			catch(Throwable _ex) { }
		}
	}

	final void method4(int i)
	{
			delayTime = 1000 / i;
	}

	public final void start()
	{
		if(anInt4 >= 0)
			anInt4 = 0;
	}

	public final void stop()
	{
		if(anInt4 >= 0)
			anInt4 = 4000 / delayTime;
	}

	public final void destroy()
	{
		anInt4 = -1;
		try
		{
			Thread.sleep(5000L);
		}
		catch(Exception _ex) { }
		if(anInt4 == -1)
			exit();
	}

	public final void update(Graphics g)
	{
		if(graphics == null)
			graphics = g;
		shouldClearScreen = true;
		raiseWelcomeScreen();
	}

	public final void paint(Graphics g)
	{
		if(graphics == null)
			graphics = g;
		shouldClearScreen = true;
		raiseWelcomeScreen();
	}

	public final void mousePressed(MouseEvent mouseevent)
	{
		int i = mouseevent.getX();
		int j = mouseevent.getY();
		if(gameFrame != null)
		{
			i -= 4;
			j -= 22;
		}
		idleTime = 0;
		clickX = i;
		clickY = j;
		clickTime = System.currentTimeMillis();
		if(mouseevent.isMetaDown())
		{
			clickMode1 = 2;
			clickMode2 = 2;
		} else
		{
			clickMode1 = 1;
			clickMode2 = 1;
		}
	}

	public final void mouseReleased(MouseEvent mouseevent)
	{
		idleTime = 0;
		clickMode2 = 0;
	}

	public final void mouseClicked(MouseEvent mouseevent)
	{
	}

	public final void mouseEntered(MouseEvent mouseevent)
	{
	}

	public final void mouseExited(MouseEvent mouseevent)
	{
		idleTime = 0;
		mouseX = -1;
		mouseY = -1;
	}

	public final void mouseDragged(MouseEvent mouseevent)
	{
		int i = mouseevent.getX();
		int j = mouseevent.getY();
		if(gameFrame != null)
		{
			i -= 4;
			j -= 22;
		}
		idleTime = 0;
		mouseX = i;
		mouseY = j;
	}

	public final void mouseMoved(MouseEvent mouseevent)
	{
		int i = mouseevent.getX();
		int j = mouseevent.getY();
		if(gameFrame != null)
		{
			i -= 4;
			j -= 22;
		}
		idleTime = 0;
		mouseX = i;
		mouseY = j;
	}

	public final void keyPressed(KeyEvent keyevent)
	{
		idleTime = 0;
		int i = keyevent.getKeyCode();
		int j = keyevent.getKeyChar();
		//System.out.println("Key Pressed: " + j + " and i: " + i);
		if(j < 30)
			j = 0;
		if(i == 37)
			j = 1;
		if(i == 39)
			j = 2;
		if(i == 38)
			j = 3;
		if(i == 40)
			j = 4;
		if(i == 17)
			j = 5;
		if(i == 8)
			j = 8;
		if(i == 127)
			j = 8;
		if(i == 9)
			j = 9;
		if(i == 10) {
			
			j = 10;
			
		}
		if(i >= 112 && i <= 123)
			j = (1008 + i) - 112;
		if(i == 36)
			j = 1000;
		if(i == 35)
			j = 1001;
		if(i == 33)
			j = 1002;
		if(i == 34)
			j = 1003;
		if(j > 0 && j < 128)
			keyArray[j] = 1;
		if(j > 4)
		{
			charQueue[writeIndex] = j;
			writeIndex = writeIndex + 1 & 0x7f;
		}
	}

	public final void keyReleased(KeyEvent keyevent)
	{
		idleTime = 0;
		int i = keyevent.getKeyCode();
		char c = keyevent.getKeyChar();
		if(c < '\036')
			c = '\0';
		if(i == 37)
			c = '\001';
		if(i == 39)
			c = '\002';
		if(i == 38)
			c = '\003';
		if(i == 40)
			c = '\004';
		if(i == 17)
			c = '\005';
		if(i == 8)
			c = '\b';
		if(i == 127)
			c = '\b';
		if(i == 9)
			c = '\t';
		if(i == 10)
			c = '\n';
		if(c > 0 && c < '\200')
			keyArray[c] = 0;
	}

	public final void keyTyped(KeyEvent keyevent)
	{
	}

	final int readChar(int dummy)
	{
		while(dummy >= 0)
		{
			for(int j = 1; j > 0; j++);
		}
		int k = -1;
		if(writeIndex != readIndex)
		{
			k = charQueue[readIndex];
			readIndex = readIndex + 1 & 0x7f;
		}
		return k;
	}

	public final void focusGained(FocusEvent focusevent)
	{
		awtFocus = true;
		shouldClearScreen = true;
		raiseWelcomeScreen();
	}

	public final void focusLost(FocusEvent focusevent)
	{
		awtFocus = false;
		for(int i = 0; i < 128; i++)
			keyArray[i] = 0;

	}

	public final void windowActivated(WindowEvent windowevent)
	{
	}

	public final void windowClosed(WindowEvent windowevent)
	{
	}

	public final void windowClosing(WindowEvent windowevent)
	{
		destroy();
	}

	public final void windowDeactivated(WindowEvent windowevent)
	{
	}

	public final void windowDeiconified(WindowEvent windowevent)
	{
	}

	public final void windowIconified(WindowEvent windowevent)
	{
	}

	public final void windowOpened(WindowEvent windowevent)
	{
	}

	void startUp()
	{
	}

	void processGameLoop()
	{
	}

	void cleanUpForQuit()
	{
	}

	void processDrawing()
	{
	}

	void raiseWelcomeScreen()
	{
	}

	Component getGameComponent()
	{
		if(gameFrame != null)
			return gameFrame;
		else
			return this;
	}

	public void startRunnable(Runnable runnable, int priority)
	{
		Thread thread = new Thread(runnable);
		thread.start();
		thread.setPriority(priority);
	}
	public Methods getMethods() {
		return new Methods();
	}
	/**
	 * Use this to send an Enter Key, will be able to send all keys soon
	 */
	public void sendEnter() {
		charQueue[writeIndex] = 10;
		writeIndex = writeIndex + 1 & 0x7f;
	}
	void drawLoadingText(int i, String s)
	{
		while(graphics == null)
		{
			graphics = getGameComponent().getGraphics();
			try
			{
				getGameComponent().repaint();
			}
			catch(Exception _ex) { }
			try
			{
				Thread.sleep(1000L);
			}
			catch(Exception _ex) { }
		}
		Font font = new Font("Helvetica", 1, 13);
		FontMetrics fontmetrics = getGameComponent().getFontMetrics(font);
		Font font1 = new Font("Helvetica", 0, 13);
		getGameComponent().getFontMetrics(font1);
		if(shouldClearScreen)
		{
			graphics.setColor(Color.black);
			graphics.fillRect(0, 0, myWidth, myHeight);
			shouldClearScreen = false;
		}
		Color color = new Color(140, 17, 17);
		int j = myHeight / 2 - 18;
		graphics.setColor(color);
		graphics.drawRect(myWidth / 2 - 152, j, 304, 34);
		graphics.fillRect(myWidth / 2 - 150, j + 2, i * 3, 30);
		graphics.setColor(Color.black);
			graphics.fillRect((myWidth / 2 - 150) + i * 3, j + 2, 300 - i * 3, 30);
			graphics.setFont(font);
			graphics.setColor(Color.white);
			graphics.drawString(s, (myWidth - fontmetrics.stringWidth(s)) / 2, j + 22);
	}

	protected RSApplet()
	{
		delayTime = 20;
		minDelay = 1;
		aLongArray7 = new long[10];
		shouldDebug = false;
		shouldClearScreen = true;
		awtFocus = true;
		keyArray = new int[128];
		charQueue = new int[128];
	}

	private int anInt4;
	private int delayTime;
	int minDelay;
	private final long[] aLongArray7;
	int fps;
	boolean shouldDebug;
	int myWidth;
	int myHeight;
	Graphics graphics;
	RSImageProducer fullGameScreen;
	protected RSFrame gameFrame;
	private boolean shouldClearScreen;
	boolean awtFocus;
	int idleTime;
	public int clickMode2;
	public int mouseX;
	public int mouseY;
	public int clickMode1;
	public int clickX;
	public int clickY;
	private long clickTime;
	public Graphics userGraphics;
	int clickMode3;
	int saveClickX;
	int saveClickY;
	long aLong29;
	final int[] keyArray;
	private final int[] charQueue;
	private int readIndex;
	private int writeIndex;
	public static int anInt34;
}
